エンコーダーの演算処理方法でリングカウンタでの処理と一致出力を使った割込みプログラムを紹介します。PLCのプログラムで処理する場合、エンコーダーの値で処理を実施するとスキャン時間の影響を受けて実際とずれが生じる場合があり、極力正確に計時したい場合は割込みプログラムで処理します。
はじめに(用語の説明)
エンコーダーとは
*エンコーダーとは、回転または位置情報をパルス信号(例A,B相)として出力するセンサのことで、回転で制御するものはロータリエンコーダと呼びます。
リングカウンタとは
エンコーダーの入力処理の方法のひとつです。
プリセット処理 一致出力機能を組み合わせて使用します。
割込みプログラムとは
特定の処理または、入力があったときにスキャンプログラムに割込みして実行するプログラムのことです。DI EIの間に実行する割込みプログラムを指定して、IMASKで設定します。
割込みプログラム中の、タイマ(T),カウンタ(C) について
割込みプログラムでは,タイマ(T) およびカウンタ(C) を使用しないでください。割込みプログラム内
のタイマ(T) およびカウンタ(C) は,1 スキャン中に割込みが複数回発生すると正常に計測できません。また,カウンタ(C) は,割込みプログラム実行時のOUT C □命令の状態によっても正常に計測できません。
プログラム設定
構成
三菱PLC(Qシリーズ)とQD62(高速カウンタユニット)を使用します。
- 一致ポイント設定をします
- 割込み設定をします
- 割込みプログラムを作成します。
インテリユニットの設定
インテリユニットの設定 スイッチの設定は、リングカウンタを使用します。
パルス入力モード、計数速度設定は標準で使いますが、用途に応じて変更します。
パラメータの設定です。一致ポイントNo.1を使用します。
10カウントすると一致ポイントNo.1の一致入力が入ります。
カウンタの機能はカウントディセーブル機能として使用します。カウンタ機能をON・OFFします。
自動リフレッシュ設定で、現在値を特定のデバイスに転送します。
今回は、一致設定で行うので、特に設定しなくても構いません。
割込みプログラムの設定
PCパラメータ設定で割込み設定をします。
割込みポインタはI50から使用します。インテリ側の設定はQD62の割付ユニット0なので先頭IOは0000となります。
割込みプログラムは、CH1の割込みプログラム 一致ポイント1が0となります。
CH2の割込みプログラム 一致ポイント1は、2となりますのでI52がそれにあたります。
割込みプログラム
割込みプログラムは、DI EIで実行を宣言します。IMASKで使用する割込みプログラムの許可をします。
D20から複数ワードで割込みプログラムの許可設定をします。I50の場合は4ワード目の3ビット目となります。CH2も使用する場合は5ビット目もONさせるのでH14と入力します。
※この部分を修正したら、PLCリセット必要です。
プログラム作成
対応するNo.のCH□一致信号No.1リセット指令(Y0,Y8),CH□一致信号No.2リセット指令(Y7,YF)により,CH□カウンタ値一致(ポイントNo.1)(X2,X9),CH□カウンタ値一致(ポイントNo.2)(X6,XD)をリセッ
ト(OFF)します。
また、同時にプリセット指令(Y1,Y9)を実行しないとカウント値が増加、減少するので次の一致信号が入ってきませんので、注意が必要です。パラメータでも設定可能です。
割込みプログラム部分
メインシーケンス部分での処理
オーバーフローや割込みでの処理以外に対応したプログラムを記述します。
一致信号は割込みでリセットできない場合、割込み処理が発生しないのでプログラムでの処理を追加しています。また、プリセットについても同様にオーバーフローした状態のままだと割込み処理が発生しません。
※こちらはリングカウンタ設定での上下限設定または、プリセット値を設定しても同様に機能すると思います。
このような設定であればY1の指令信号は不要です。
まとめ
エンコーダー演算処理方法の処理プログラムですが、処理の仕方もいくつかあると思います。
割込み処理を実行したほうが、スキャンにより計数ミスがなくよりいいかと思いますが、事前の検証も必要です。(これに限ったことではありませんが・・)
参考になれば幸いです。